package test.tp2;

import impl.AbstractSorter;
import impl.SelectionSorter;

import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;

public class Ejercicio3 {

    public static void main(String[] args) {
        List<NombreCompleto> namelist = new ArrayList<NombreCompleto>();
        System.out.println("LISTA INICIAL:");
        namelist.add(new NombreCompleto("Alonso", "Paula"));
        namelist.add(new NombreCompleto("Diaz", "Diego"));
        namelist.add(new NombreCompleto("Alonso", "Diego"));
        List<NombreCompleto> namelist1 = new ArrayList<NombreCompleto>();
        namelist1 = namelist;
        printList(namelist);
        AbstractSorter sorter = new SelectionSorter();

        sorter.sort(new fullNameComparator(), namelist);
        System.out.println("LISTA ORDENADA POR APELLIDO:");
        printList(namelist);

        sorter.sort(new fullNameComparator1(), namelist1);
        System.out.println("LISTA ORDENADA POR NOMBRE:");
        printList(namelist1);
    }

    private static void printList(List<NombreCompleto> list) {
        for (int i = 0; i < list.size(); i++) {
            System.out.println(list.get(i).getApellido() + ", " + list.get(i).getNombre());
        }
        System.out.println("\n\n");
    }

    private static class fullNameComparator implements Comparator<NombreCompleto> {
        public int compare(NombreCompleto s1, NombreCompleto s2) {
            if (s1.getApellido().equalsIgnoreCase(s2.getApellido())) {
                return s1.getNombre().compareToIgnoreCase(s2.getNombre());
            } else {
                return s1.getApellido().compareToIgnoreCase(s2.getApellido());
            }
        }
    }

    private static class fullNameComparator1 implements Comparator<NombreCompleto> {
        public int compare(NombreCompleto s1, NombreCompleto s2) {
            if (s1.getNombre().equalsIgnoreCase(s2.getNombre())) {
                return s1.getApellido().compareToIgnoreCase(s2.getApellido());
            } else {
                return s1.getNombre().compareToIgnoreCase(s2.getNombre());
            }
        }
    }
}